home *** CD-ROM | disk | FTP | other *** search
- /*====================================================
- ARTemis
- (version 1.3)
- FM-TOWNS 用ペイントツール
-
- by 松内 良介 1994
- ====================================================*/
- /*
- main.c
- main(), APL_init()
- ・GUIライブラリ、各モジュールの初期化
- ・MMI_ExecSystem() による GUIシステムの起動
- ・終了時の後片付け処理
- */
- #define MODULE_MAIN
-
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <winb.h>
- #include <te.h>
- #include <fntb.h>
- #include <gui.h>
- #include <fmcfrb.h>
- #include <file_dlg.h>
- #include <egb.h>
- #include <ctype.h>
- #include <direct.h>
- #include <dos.h>
-
- #include "art.h"
- #include "imagewin.h"
- #include "imgbtn.h"
- #include "pensel.h"
- #include "colsel.h"
- #include "guisub.h"
- #include "desktop.h"
-
- void getExecDir(char *argv0, char *buf)
- // buf: _MAX_PATH バイトのバッファ
- {
- uint nouse;
- char curdir[_MAX_PATH],curdir2[_MAX_PATH];
- _getcwd(curdir, _MAX_PATH);
- char drive[_MAX_DRIVE],dir[_MAX_DIR],basename[_MAX_FNAME],ext[_MAX_EXT];
- _splitpath(argv0,drive,dir,basename,ext);
- if (drive[0] != 0)
- _dos_setdrive(toupper(drive[0])-'A'+1, &nouse);
- _getcwd(curdir2,_MAX_PATH);
- strcat(dir,".");
- _chdir(dir);
- _getcwd(buf, _MAX_PATH);
- _chdir(curdir2);
- _dos_setdrive(toupper(curdir[0])-'A'+1, &nouse);
- _chdir(curdir);
- if (strlen(buf) > 3)
- strcat(buf, "\\");
- }
-
- char *guiEgbPtr ; /* EGB のワークアドレス */
- unsigned int *guiColTbl; /* 色変換テーブルのアドレス */
-
- int IMGBOXproto = -1; /* IMGBOX部品のひな型のID */
- int IMGBTNproto = -1;
-
- int imgwin_cnt;
-
- int scrPixelSize;
- int paramNizimi = 50;
- int paramKosuri = 128;
- char dirExec[_MAX_PATH];
-
- void main(int argc, char *argv[])
- {
- getExecDir(argv[0],dirExec);
- MMICTRL ctrl,ctrl2;
- extern int APL_init() ;
- int i;
- BOOL fScr32K = FALSE;
- for (i=1; i<argc; i++)
- {
- if (argv[i][0] == '-')
- {
- if (strcmp(argv[i]+1,"32k")==0 || strcmp(argv[1]+1,"32K") == 0)
- fScr32K = TRUE;
- }
- }
-
- /* 致命的エラーハンドラの登録 */
- FM_SetVector() ;
-
- if (!fScr32K)
- {
- char para[12];
- RESOLUTION buf[2];
- DWORD(para+0)=1;
- DWORD(para+4)=24;
- DWORD(para+8)=0;
- if (EGB_getResolutionMax(0,para,buf) != -1)
- ctrl.page0 = SCREEN16M , scrPixelSize = 24;
- else
- ctrl.page0 = SCREEN32K , scrPixelSize = 16;
- }
- else
- ctrl.page0 = SCREEN32K, scrPixelSize = 16;
- ctrl.page1 = SCREENUNUSED ;
- ctrl.writePage = 0 ; /* 書き込みページ */
- ctrl.displayPage = 1 ; /* 表示ページフラグ */
- ctrl.priority = 0 ; /* 表示プライオリティ */
-
- ctrl.mode = SCREENAVAILABLE ;
- ctrl.width = SCREENEXPAND ;
- ctrl.size = 0 ; /* メモリ領域の大きさ */
- ctrl.ptr = NULL ; /* メモリ領域のアドレス */
- ctrl.asize = 0 ; /* ユーザ領域の大きさ */
- ctrl.aptr = NULL ; /* ユーザ領域のアドレス */
- ctrl.move.lupx = -10000; /* 部品移動枠 */
- ctrl.move.lupy = 20 ; /* (ダイアログ移動範囲制限(y座標)) */
- ctrl.move.rdwx = 10000;
- ctrl.move.rdwy = 10000;
- ctrl.white = 15 ; /* 白の色番号 */
- ctrl.black = 8 ; /* 黒の色番号 */
- ctrl.gray = 7 ; /* 灰色の色番号 */
- ctrl.xor = 6 ; /* 反転色の色番号 */
-
- if (MMI_Open(&ctrl) == NOERR)
- {
- /* 初期化に成功すればメインループに入る. */
- if (APL_init() == NOERR)
- {
- FDG_SaveCurDir() ;
- FDG_InitFileDlg() ;
- RM_setFileDlgStyle(1);
- MMI_ExecSystem() ;
- FDG_FreeFileDlg();
- FDG_RecovCurDir() ;
- }
- /* ARTemis 内の各モジュールの終了処理 */
- pensel_end();
- pic_close();
- }
-
- /* 終了処理 */
- MMI_Close() ;
-
- /* 致命的エラーハンドラの復帰 */
- FM_ResetVector() ;
-
- /* キークリック音のOFF */
- KYB_clic(1);
- }
-
- int APL_init()
- {
- extern MMIINIT initDataABOUT ;
- extern MMIINIT initDataZALERT ;
- extern MMIINIT initDataZCOLSEL ;
- extern MMIINIT initDataZCREATE ;
- extern MMIINIT initDataZDESKTOP ;
- extern MMIINIT initDataZIMGWIN ;
- extern MMIINIT initDataZPENSEL ;
- extern MMIINIT initDataZSETUP ;
- extern MMIINIT initDataZALLSCR ;
- extern int set_icontable(void);
-
- register int ret ;
-
- /* EGB ワークアドレスの取得. */
- guiEgbPtr = MMI_GetEgbPtr() ;
-
- /* ハイパ型部品の初期化 */
- if ((ret = MMI_initHyper()) < 0)
- return ret ;
- /* ダイアログ型部品の初期化 */
- if ((ret = MMI_initDialogL40()) < 0)
- return ret ;
- /* アラート型部品の初期化 */
- if ((ret = MMI_initAlertL40()) < 0)
- return ret ;
- /* ウインドウ型部品の初期化 */
- if ((ret = MMI_initWindowL40()) < 0)
- return ret ;
- /* メッセージ型部品の初期化 */
- if ((ret = MMI_initMessageL40()) < 0)
- return ret ;
- /* メニュー型部品の初期化 */
- if ((ret = MMI_initMenuL40()) < 0)
- return ret ;
- /* ボタン型部品の初期化 */
- if ((ret = MMI_initButtonL40()) < 0)
- return ret ;
- /* ドロウボタン型部品の初期化 */
- if ((ret = MMI_initDrawButtonL40()) < 0)
- return ret ;
- /* アイコンボタン型部品の初期化 */
- if ((ret = MMI_initIconL40()) < 0)
- return ret ;
- /* トグルアイコン型部品の初期化 */
- if ((ret = MMI_initToggleIconL40()) < 0)
- return ret ;
- /* メニューアイテム型部品の初期化 */
- if ((ret = MMI_initMenuItemL40()) < 0)
- return ret ;
- /* スクロール型部品の初期化 */
- if ((ret = MMI_initScrollBarL40()) < 0)
- return ret ;
- /* テキスト型部品の初期化 */
- if ((ret = MMI_initTextL40()) < 0)
- return ret ;
- /* リストメニュー型部品の初期化 */
- if ((ret = MMI_initListMenuL40()) < 0)
- return ret ;
- /* 数値入力型部品の初期化 */
- if ((ret = MMI_initNumBoxL40()) < 0)
- return ret ;
-
- /* イメージボックス型部品の初期化 */
- if ((ret = MMI_initImageBox()) < 0)
- return ret;
- /* イメージボタン型部品の初期化 */
- if ((ret = MMI_initImageBtn()) < 0)
- return ret ;
-
- /* デフォルトビジュアルエフェクトの登録 */
- MMI_SetUpVisualEffect() ;
-
- /* 背景データの初期化 */
- EGB_tmenuPalette2(guiEgbPtr) ;
-
- /* データの登録 */
- if ((ret = MMI_Init(&initDataABOUT)) < 0)
- return ret ;
- if ((ret = MMI_Init(&initDataZALERT)) < 0)
- return ret ;
- if ((ret = MMI_Init(&initDataZCOLSEL)) < 0)
- return ret ;
- if ((ret = MMI_Init(&initDataZCREATE)) < 0)
- return ret ;
- if ((ret = MMI_Init(&initDataZDESKTOP)) < 0)
- return ret ;
- if ((ret = MMI_Init(&initDataZIMGWIN)) < 0)
- return ret ;
- if ((ret = MMI_Init(&initDataZPENSEL)) < 0)
- return ret ;
- if ((ret = MMI_Init(&initDataZSETUP)) < 0)
- return ret ;
- if ((ret = MMI_Init(&initDataZALLSCR)) < 0)
- return ret ;
-
- /* SIDEWORKメニューを登録する */
- MMI_SetUpSDKMenu( idDesktopMItem_System , 2 ) ;
-
- /* ARTemisの各モジュールの初期化 */
- if ((ret = IMGBOX_makePrototype(&IMGBOXproto)) < 0)
- return ret;
- if ((ret = IMGBTN_makePrototype(&IMGBTNproto)) < 0)
- return ret;
-
- if ((ret = desktop_init()) < 0)
- return ret ;
- if ((ret = imagewin_init()) < 0)
- return ret ;
- if ((ret = pic_init()) < 0)
- return ret ;
- if ((ret = pensel_init()) < 0)
- return ret ;
- if ((ret = colsel_init()) < 0)
- return ret ;
-
- /* カラーテーブルの設定 */
- scrplt_init();
-
- /* アイコンテーブルの設定 */
- if ((ret = set_icontable()) < 0)
- return ret ;
-
- // 解像度に合わせて部品のサイズを調整
- WINCTRL *pctrl;
- MMI_GetControl(&pctrl);
- FRAME fr;
- RM_getFrame(idBackDialog, &fr);
- fr.X2 = pctrl->bound.X2;
- fr.Y2 = pctrl->bound.Y2;
- RM_setFrame(idBackDialog, &fr);
- RM_getFrame(idDesktopDialog, &fr);
- fr.X2 = pctrl->bound.X2;
- RM_setFrame(idDesktopDialog, &fr);
- RM_offsetFrame(idDesktopExitIcon, pctrl->bound.X2+1 - 512, 0);
- RM_offsetFrame(idDesktopHelpIcon, pctrl->bound.X2+1 - 512, 0);
- RM_offsetFrame(idDesktopSkbIcon, pctrl->bound.X2+1 - 512, 0);
-
- /* ツールボックス、ペン選択パレットの接続 */
- MMI_SendMessage( idBrushT2Hyper, MM_DETACH, 0);
- {
- FRAME fr,fr2;
- fr = OBJHYP(idBrushTinyDlg).fr;
- fr2 = OBJHYP(idBrushT2Hyper).fr;
- RM_moveFrameTo(&fr2, fr.X+2, fr.Y+2);
- MMI_SendMessage( idBrushT2Hyper, MM_MOVE, 1, &fr2);
- }
- MMI_SendMessage( idBrushT2Hyper, MM_ATTACH, 2, idBrushTinyDlg, 1);
- /* ペン先選択ウィンドウの接続 */
- MMI_SendMessage( idBrushTinyDlg, MM_ATTACH, 1, idDesktopToolAttachHyper );
- /* 色選択ウィンドウの接続 */
- MMI_SendMessage( idColSelDlg, MM_ATTACH, 1, idDesktopToolAttachHyper );
-
- /* 背景を表示する */
- MMI_SendMessage(MMI_GetBaseObj(), MM_SHOW, 0) ;
-
- double freemem = (double)(TL_checkMemory(0)*4) / 1024.0;
- if (freemem < 2.0)
- {
- char msg[500];
- sprintf(msg,
- "このマシンで現在 ARTemis が作業のために使えるメモリは"
- " %3.1fメガバイトで、あまり余裕がありません。"
- "できればあと %3.1fメガバイト程度のメモリを追加することを"
- "おすすめします。", freemem, 3.0-freemem);
- dispBigAlertMessage("メモリ不足にご注意を…", msg);
- }
- return NOERR ;
- }
-
-